const Compiler = require('./Compiler')
const NodeEnvironmentPlugin = require('./node/NodeEnvironmentPlgin')
const WebpackOptionsApply = require('./WebpackOptionsApply')

const webpack = function(options) {
  // 1. 实例化compiler对象
  let compiler = new Compiler(options.context)
  compiler.options = options
  // 2. 初始化 NodeEnvironmentPlugin，让compiler具备文件读写能力
  new NodeEnvironmentPlugin().apply(compiler)
  // 3. 挂载所有的plugins至compiler对象上
  if(Array.isArray(options.plugins)) {
    for (const plugin of options.plugins) {
      plugin.apply(compiler)
    }
  }
  // 4. 挂载所有webpack内置plugins，（处理入口文件的plugin）
  new WebpackOptionsApply().process(compiler, options)
  // 5. 返回compiler
  return compiler
}

module.exports = webpack